#include <iostream>
#include <gflags/gflags.h>
/*
    google开源的c++的命令行参数解释gflags库
    帮助我们将命令行的参数分离提取出来，方便使用
    因为参数顺序以及格式的不同，自行处理很复杂
    并且gflags提供了配置文件的方式读取参数，让程序的运行参数配置更加标准化，不需要每次运行的时候都手动收入每个参数的数值

    命令行标志前要加--
    配置文件标志前加-

    // 命令行中的特殊标识
    --help # 显示文件中所有标识的帮助信息
    --helpfull # 和-help 一样, 帮助信息更全面一些
    --helpshort # 只显示当前执行文件里的标志
    --helpxml # 以 xml 方式打印，方便处理
    --version # 打印版本信息，由 google::SetVersionString()设定
    --flagfile/-flagfile=f #从文件 f 中读取命令行参数
*/

// 用宏定义命令行参数标志、标志默认值、提示信息
// 下面的标志会被编译器添加前缀FLAGS_，所有后期要访问，要添加前缀FLAGS_
DEFINE_string(ip, "127.0.0.1", "ip地址");
DEFINE_int32(port, 8080, "端口号");
DEFINE_bool(debug_enable, false, "是否开启调试");

int main(int argc, char *argv[])
{
    // 根据定义的命令行参数名解析参数，第三个参数表示是否移除argv中处理过的标志
    // true:  删除标志，argc修改（剩余未处理参数，非标志）
    // false: 保留标志，移动非标志到尾部(第一个非标志./gflags不移动)，argc不变
    // 返回值是非标志的起始下标
    google::uint32 ret = google::ParseCommandLineFlags(&argc, &argv, true);

    std::cout << FLAGS_ip << std::endl;
    std::cout << FLAGS_port << std::endl;
    std::cout << FLAGS_debug_enable << std::endl;

    return 0;
}
